﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ECOSYSTEM_BL;
using ECOSYSTEM_Dominio;

namespace ECOSYSTEMPRESENTACION
{
    public partial class frmGuiaRemision : Form, Interfaz
    {
        public frmGuiaRemision()
        {
            InitializeComponent();
        }
        ClienteBL elClienteBl = new ClienteBL();
        TransportistaBL elTransportistaBL = new TransportistaBL();        
        TemporalBL elTemporalBL = new TemporalBL();
        GuiaRemision laGuiaRemision = new GuiaRemision();
        GuiaRemisionBL laGuiaRemisionBL = new GuiaRemisionBL();
        GuiaRemision.DetalleGuiaRemision elDetalleGuia = new GuiaRemision.DetalleGuiaRemision();
        frmFactura laFac;
        public frmDesactivarSerie formDes;
        public frmGuiaRemision laGuiaForm;
        List<Transportista> lista;
        Double IGV, TasaCambio;
        String Moneda;
        Int32 CodigoIDGuia;
        public Int32 CodFacID;
        public InterfazGuia Manipular { set; get; }
        private GuiaRemision ObtenerObjetoGuia()
        {
            laGuiaRemision.NroGuiaRem = txtNroGuia.Text;
            laGuiaRemision.Fecha = dtpFecha.Text;
            laGuiaRemision.NroComprobante = txtNroComprobantePago.Text;
            laGuiaRemision.PuntoPartida = txtPuntoPartida.Text;
            laGuiaRemision.Estado = cmbEstado.Text;
            laGuiaRemision.ElTransportista = txtRUCT.Text;
            laGuiaRemision.ElCliente = txtRUCCLiente.Text;
            return laGuiaRemision;
        }
        public Boolean GuardarGuia()
        {
            GuiaRemision laGuiaRemision = ObtenerObjetoGuia();
            CodigoIDGuia = laGuiaRemisionBL.guardarGuiaRemision(laGuiaRemision);
            GuardarDetalleGuia();
            return true;
        }
        public Boolean ActualizarGuia()
        {
            GuiaRemision laGuiaRemision = ObtenerObjetoGuia();
            if (txtNroGuia.Text == lblNroGuia.Text)
                laGuiaRemisionBL.ActualizarGuiaRemision(laGuiaRemision,Convert.ToInt32(lblGuiaID.Text), "");
            else
                laGuiaRemisionBL.ActualizarGuiaRemision(laGuiaRemision,Convert.ToInt32(lblGuiaID.Text), txtNroGuia.Text);
            GuardarDetalleGuia();
            return true;
        }
        private void GuardarDetalleGuia()
        {
            for (int i = 0; i <= dgvDetalleGuia.Rows.Count - 1; i++)
            {
                if (Convert.ToString(dgvDetalleGuia["Identificador", i].Value) == "N")
                    EnviarDatosBD(Convert.ToInt32(dgvDetalleGuia["CantidadProd", i].Value),Convert.ToString(dgvDetalleGuia["UnidMedida",i].Value),Convert.ToDouble(dgvDetalleGuia["PesoTotal",i].Value), Convert.ToInt32(dgvDetalleGuia["CodigoProducto", i].Value), CodigoIDGuia, "N");
                if (Convert.ToString(dgvDetalleGuia["Identificador", i].Value) == "A")
                    EnviarDatosBD(Convert.ToInt32(dgvDetalleGuia["CantidadProd", i].Value),Convert.ToString(dgvDetalleGuia["UnidMedida",i].Value),Convert.ToDouble(dgvDetalleGuia["PesoTotal",i].Value), Convert.ToInt32(dgvDetalleGuia["CodigoProducto", i].Value), CodigoIDGuia, "A");
            }
        }
        private Boolean EnviarDatosBD(Int32 Cantidad,String UnidadMedida, Double PesoTotal, Int32 IDProducto, Int32 IDGuia, String NuevoOActualizar)
        {
            elDetalleGuia.Cantidad = Cantidad;
            elDetalleGuia.ElProductoID = IDProducto;
            elDetalleGuia.UnidadMedida = UnidadMedida;
            elDetalleGuia.PesoTotal = PesoTotal;
            if (lblGuiaID.Text != "")
                elDetalleGuia.LaGuiaID = Convert.ToInt32(lblGuiaID.Text);
            else
               elDetalleGuia.LaGuiaID = IDGuia;
            if (NuevoOActualizar == "N")
                laGuiaRemisionBL.guardarDetalleGuiaRemision(elDetalleGuia);
            if (NuevoOActualizar == "A")
                laGuiaRemisionBL.ActualizarDetalleGuia(elDetalleGuia);
            return true;
        }
        public void LlenarComboCliente()
        {
            if (cmbRazonSocial.DataSource == null)
            {
                cmbRazonSocial.DataSource = elClienteBl.ObtenerClientes("TODOS");
                cmbRazonSocial.DisplayMember = "Cliente";
                cmbRazonSocial.ValueMember = "RUC-DNI";
            }
        }
        public void LlenarDatosCliente(String RucBuscar)
        {
            List<Cliente> lista;
            lista = elClienteBl.BuscarClienteID(Convert.ToString(cmbRazonSocial.SelectedValue));
            foreach (Cliente fila in lista)
            {
                this.txtRUCCLiente.Text = fila.RUCDNICLiente.ToString();
                this.txtDirecCliente.Text = fila.DirecCliente.ToString();
            }
        }
        public void llenarComboTransportista()
        {
            if (cmbListaTransportista.DataSource == null)
            {
                cmbListaTransportista.DataSource = elTransportistaBL.ObtenerListaTransportista();
                cmbListaTransportista.DisplayMember = "RazonSocial";
                cmbListaTransportista.ValueMember = "TransportistaID";
                cmbListaTransportista.Text = "";
            }
        }
        public void CargarRUC(Int32 IDTrans) {
            try
            {
                lista = elTransportistaBL.ObtenerRUCTransportista(IDTrans);
                if(lista.Count>0)
                    foreach (Transportista fila in lista)
                    {
                        txtRUCT.Text = fila.RUCTransp.ToString();
                    }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void CargarDatosCliente(string Nombre, string Ruc, string Direccion)
        {
            try
            {
                cmbRazonSocial.Text = Nombre;
                txtRUCCLiente.Text = Ruc;
                txtDirecCliente.Text = Direccion;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void ObtenerTCambio()
        {
            List<Temporal> listaTempo;
            listaTempo = elTemporalBL.ObtenerActualesDatos();
            foreach (Temporal fila in listaTempo)
            {
                TasaCambio = fila.TasaCambio;
                IGV = fila.IGV;
                Moneda = fila.MonedaVentas;
            }
        }
        public void CargardatosProducto(string NomProd, string Cantidad, string PrecioVenta, string CodProd)
        {
            throw new NotImplementedException();
        }

        public void ActivarMenu(bool Opcion)
        {
            throw new NotImplementedException();
        }
        public void CargarDatosDeGuia(String nroGuia) {
            try
            {
                List<GuiaRemision> lista;
                LlenarComboCliente();
                llenarComboTransportista();
                lista = laGuiaRemisionBL.ObtenerGuiaEmitidaPorNro(nroGuia);
                if (lista.Count > 0) {
                    foreach (GuiaRemision fila in lista) {
                        lblGuiaID.Text = Convert.ToString(fila.GuiaRemisionID);
                        txtNroGuia.Text = fila.NroGuiaRem;
                        lblNroGuia.Text = fila.NroGuiaRem;
                        cmbEstado.SelectedItem = fila.Estado;
                        txtPuntoPartida.Text = fila.PuntoPartida;
                        dtpFecha.Value = Convert.ToDateTime(fila.Fecha);
                        txtNroComprobantePago.Text = fila.NroComprobante;
                        cmbRazonSocial.SelectedValue = fila.ElCliente;
                        LlenarDatosCliente(Convert.ToString(cmbRazonSocial.SelectedValue));
                        cmbListaTransportista.SelectedValue = Convert.ToInt32(fila.ElTransportista);
                        CargarRUC(Convert.ToInt32(cmbListaTransportista.SelectedValue));
                    }
                }
                cbMostrarAllSeries.Visible = false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void CargarDetalleGuia(String NroGuiaEmitida)
        {
            List<GuiaRemision.DetalleGuiaRemision> lista;
            lista = laGuiaRemisionBL.ObtenerDetalleGuiaEmitida(NroGuiaEmitida);
            if (lista.Count > 0)
            {
                foreach (GuiaRemision.DetalleGuiaRemision fila in lista)
                {
                    dgvDetalleGuia.Rows.Add(fila.NameProduc,fila.Cantidad,fila.UnidadMedida,fila.PesoTotal,fila.ElProductoID,"R");
                }
            }
        }
        public void ActuliarzarProductoDetalleGuia(String nameProduc, Int32 CantProd, String CodProducto) {
            for (int i = 0; i <= dgvDetalleGuia.Rows.Count - 1; i++) {                
                if (Convert.ToString(dgvDetalleGuia["CodigoProducto", i].Value) == CodProducto)
                {
                    dgvDetalleGuia["NameProduc", i].Value = nameProduc;
                    dgvDetalleGuia["UnidMedida", i].Value = "UNIDAD";
                    dgvDetalleGuia["PesoTotal", i].Value = "0";
                    dgvDetalleGuia["CodigoProducto", i].Value = CodProducto;
                    dgvDetalleGuia["Identificador", i].Value = "A";
                }
            }            
        }
        public void EliminarProductoLista(Int32 CodProd) {
            for (int i = 0; i <= dgvDetalleGuia.Rows.Count - 1; i++) {
                if (Convert.ToInt32(dgvDetalleGuia["CodigoProducto", i].Value) == CodProd) {
                    dgvDetalleGuia.Rows.RemoveAt(i);
                }
            }
        }
        public void HabilitarGrupos() {
            groupBox1.Enabled = true;
            groupBox2.Enabled = true;
            groupBox4.Enabled = true;
            groupBox5.Enabled = true;
            groupBox6.Enabled = true;
            groupBox7.Enabled = true;            
        }
        public void InhabilitarGrupos()
        {
            groupBox1.Enabled = false;
            groupBox2.Enabled = false;
            groupBox4.Enabled = false;
            groupBox5.Enabled = false;
            groupBox6.Enabled = false;
            groupBox7.Enabled = false;
        }
        // --> EVENTOS <--


        private void cmbRazonSocial_SelectionChangeCommitted(object sender, EventArgs e)
        {
            try
            {
                LlenarDatosCliente(Convert.ToString(cmbRazonSocial.SelectedValue));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cmbRazonSocial_KeyUp(object sender, KeyEventArgs e)
        {
            try
            {
                LlenarDatosCliente(Convert.ToString(cmbRazonSocial.SelectedValue));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cmbListaTransportista_SelectionChangeCommitted(object sender, EventArgs e)
        {
            try
            {                
                CargarRUC(Convert.ToInt32(cmbListaTransportista.SelectedValue));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                frmBuscarProducto formBusProd = new frmBuscarProducto();
                formBusProd.MdiParent = this.MdiParent;
                formBusProd.Manipular = this;
                formBusProd.NameFormulario = "frmGuiaRemision";
                formBusProd.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        private void btnCancelarUpdateProducto_Click(object sender, EventArgs e)
        {
            try
            {
                txtProducto.Text = "";
                lblCodigoProducto.Text = "";
                lblNroFila.Text = "";
                dgvDetalleGuia.Enabled = true;
                btnActualizarProducto.Visible = false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (Application.OpenForms["frmFactura"] != null)
            {
                laFac = new frmFactura();
                laFac.cbRegistrarGuia.Checked = false;
                btnGuardar.Enabled = false;
                btnActualizar.Enabled = false;
                btnCancelar.Enabled = false;
                this.Visible = false;
            }
            else
                this.Close();
        }       
        private void cbMostrarAllSeries_CheckedChanged(object sender, EventArgs e)
        {
            try
            {laFac = new frmFactura();
                if (cbMostrarAllSeries.Checked == true)
                {
                    if (dgvDetalleGuia.Rows.Count > 0)
                    {
                        formDes.MdiParent = this.MdiParent;
                        formDes.dgvListaSerieDesactivar.Enabled = false;
                        formDes.Visible = true;
                    }
                    else
                        MessageBox.Show("NO HAY SERIES A MOSTRAR");
                    
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); cbMostrarAllSeries.Checked = false;}
        }

        private void dgvDetalleGuia_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                Int32 nroFila = Int32.Parse(e.RowIndex.ToString());
                txtProducto.Text = Convert.ToString(dgvDetalleGuia["NameProduc", nroFila].Value);
                txtUnidMedida.Text = Convert.ToString(dgvDetalleGuia["UnidMedida", nroFila].Value);
                txtPesoTotal.Text = Convert.ToString(dgvDetalleGuia["PesoTotal", nroFila].Value);
                lblCodigoProducto.Text = Convert.ToString(dgvDetalleGuia["CodigoProducto", nroFila].Value);
                lblNroFila.Text = Convert.ToString(nroFila);
               // dgvDetalleGuia.Enabled = false;
                btnActualizarProducto.Visible = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnActualizarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                Int32 nroFila = Convert.ToInt32(lblNroFila.Text);
                if (Convert.ToString(dgvDetalleGuia["UnidMedida", nroFila].Value) != txtUnidMedida.Text || Convert.ToString(dgvDetalleGuia["PesoTotal", nroFila].Value) != txtPesoTotal.Text)
                {
                    dgvDetalleGuia["UnidMedida", nroFila].Value = txtUnidMedida.Text;
                    dgvDetalleGuia["PesoTotal", nroFila].Value = txtPesoTotal.Text;
                    if (Convert.ToString(dgvDetalleGuia["Identificador", nroFila].Value) == "R")
                    {
                        dgvDetalleGuia["Identificador", nroFila].Value = "A";
                    }
                    else
                    {
                        dgvDetalleGuia["Identificador", nroFila].Value = "N";
                    }
                }
                txtProducto.Text = "";
                lblCodigoProducto.Text = "";
                lblNroFila.Text = "";
                txtUnidMedida.Text = "";
                txtPesoTotal.Text = "";
                dgvDetalleGuia.Enabled = true;
                btnActualizarProducto.Visible = false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cmbListaTransportista_KeyUp(object sender, KeyEventArgs e)
        {
            try
            {
                CargarRUC(Convert.ToInt32(cmbListaTransportista.SelectedValue));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnNuevoCliente_Click(object sender, EventArgs e)
        {
            cmbRazonSocial.Text = "";
            txtRUCCLiente.Text = "";
            txtDirecCliente.Text = "";
            frmCliente formCliente = new frmCliente();
            formCliente.MdiParent = this.MdiParent;
            formCliente.Manipular = this;
            formCliente.NameFormulario = "frmCliente";
            formCliente.btnBuscar.Visible = false;
            formCliente.btnActualizar.Visible = false;
            formCliente.btnCancelar.Enabled = false;
            formCliente.Show();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                GuardarGuia();
                MessageBox.Show("GUIA REGISTRADA CORRECTAMENTE");
                this.Manipular.CargarNroGuia(txtNroGuia.Text);
                btnGuardar.Enabled = false;
                btnActualizar.Enabled = false;
                btnCancelar.Enabled = false;
                this.Close();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void frmGuiaRemision_Load(object sender, EventArgs e)
        {
            txtNroGuia.Select();
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            try
            {
                ActualizarGuia();
                MessageBox.Show("GUIA ACTUALIZADA CORRECTAMENTE");
                InhabilitarGrupos();
                
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                frmBuscarGuia BusGuia = new frmBuscarGuia();
                BusGuia.btnCancelar.Visible = false;
                BusGuia.MdiParent = this.MdiParent;
                BusGuia.Show();
                this.Close();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        
    }
}
